import { WidgetType } from './WidgetType'
import { FontFamily, TextAlign } from './text'
import { DateFormat } from './date'
import { ImageAspect } from './image'
import { LocateType, FillRadioGroupItem, FillCheckboxGroupItem } from './raw'
import { TableColWidths, TableField, TableInsertWay, TableOptions } from './table'
import { WidgetSource } from './WidgetSource'

/**
 * 原始控件数据
 * @description 后端存储的控件 JSON 原始数据
 */
export interface RawField {
  /** 控件 id */
  id: string

  /** 控件类型名称 */
  label: string

  /** 控件参与方 */
  name: string

  /** 控件类型 */
  type: WidgetType

  /** 控件签署类型，应优先使用 type */
  signStyle: WidgetType

  /** 控件所在页，0 开始 */
  p: number

  /** 控件宽度 */
  w: number

  /** 控件高度 */
  h: number

  /** 定位方式，默认以中心点定位 */
  locateType?: LocateType

  /** 控件坐标 x，默认相对中心点 */
  x: number

  /** 控件坐标 y，默认相对中心点 */
  y: number

  /** 填写控件名称 */
  widgetName: string

  /** 控件值 */
  widgetValue: string

  /** 是否骑缝控件，1 是；0 否 */
  crossPageSeal?: number

  /** 是否控件批量 */
  batch?: boolean

  /**
   * 控件批量 id
   *
   * @description
   *
   * 为应对不支持批量控件的端，需要将批量控件当作多个普通控件处理。
   *
   * 提交时会将批量控件按页面复制多份并指定对应页码，额外复制的控件会填写 `batchId` 以作区分，便于后续标记删除
   *
   * 支持批量控件的端，需要忽略带 `batchId` 控件，不支持的当普通控件处理即可
   */
  batchId?: string

  /**
   * 应用的页面，用于批量和骑缝控件
   * @description
   * - `undefined`: 全部页面
   * - `'ODD'`: 奇数页
   * - `'EVEN'`: 偶数页
   * - `'1, 2, 5-8'`: 指定页（仅批量控件，从 1 开始）
   */
  applyPage?: string

  /**
   * 控件关联 id
   * @description
   * 骑缝、批量控件应用到其它文档时通过 `linkId` 关联
   */
  linkId?: string

  /** 签章控件是否跟随签章图片规格尺寸 */
  followSignSize?: boolean

  /**
   * 签章控件自定义规格时是否保持比例，
   * `followSignSize` 为 `false` 时生效
   */
  keepSignAspect?: boolean

  /** 是否必填 */
  isRequired: boolean

  /** 文本对齐 */
  align?: TextAlign

  /** 文字大小 */
  fontSize?: number

  /** 字体 */
  fontType?: FontFamily

  /** 占位文本 */
  placeholder?: string

  /** 数字是否固定小数位 */
  isDecimalLimit?: boolean

  /** 数字小数位 */
  numberFormat?: number

  /** 数字是否显示千分位 */
  thousands?: boolean

  /** 日期格式 */
  dateFormat?: DateFormat

  /** 单选/复选框组 子项列表 */
  childWidgetList?: FillRadioGroupItem[] | FillCheckboxGroupItem[]

  /** 下拉选择选项 */
  selectOptions?: string[]

  /** 图片名称 */
  imageName?: string

  /** 图片长宽比 */
  aspectRatio?: ImageAspect

  /** 表格控件设置 */
  tableOptions?: Partial<TableOptions>

  /** 表格控件字段 */
  tableFields?: TableField[]

  /** 表格列宽百分比 */
  colWidthPercent?: TableColWidths

  /** 表格插入方式，新表格默认按插入坐标 */
  tableInsertWay?: TableInsertWay.AXIS

  /** 控件数据来源 */
  widgetSource?: WidgetSource

  // eslint-disable-next-line
  [key: string]: any
}
